package br.com.cast.UseCaseProdutos.persistencia;

import java.util.Iterator;

import javax.persistence.Query;

import org.springframework.stereotype.Component;

import br.com.cast.UseCaseProdutos.models.Produto;

@Component 
public class ProdutoDAO extends DAOBase<Produto> {
	
	public ProdutoDAO() {
	}
	
	@SuppressWarnings("unchecked")
	public Iterator<Produto> consultaPaginada(long inicio, long total) {
		
		Query query = getEntityManager()
				.createQuery("FROM Produto");
		
		query.setFirstResult((int) inicio);
		query.setMaxResults((int)total);
		
		return query.getResultList().iterator();
	}
	
	public boolean produtoJaCadastrado(Produto produto) {
		
		StringBuilder hql = new StringBuilder();
		
		hql.append("SELECT COUNT(*) as qtd ")
		   .append("FROM Produto ")
		   .append("WHERE descricao = :descricao");
		
		if (produto.getId() != null) {//alteração
			//tem que existir um país que não seja ele mesmo
			//com o mesmo nome.
			//esse AND faz com que sejam verificados somente os outros países 
			//no fluxo de alteração
			hql.append(" AND id <> :id ");
		}

		Query query = getEntityManager()
				.createQuery(hql.toString());
			
		query.setParameter("descricao", produto.getDescricao());
		
		if (produto.getId() != null) {//alteração
			query.setParameter("id", produto.getId());
		}
		
		return (long)query.getSingleResult() > 0;
	}

}
